<?php

declare(strict_types=1);

namespace app\admin\validate;

use think\Validate;
use think\facade\Db;

class LogisticsRules extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    // 验证规则
    protected $rule = [
        'id'                     => 'require|integer|gt:0', // 主键ID，必填，整数，必须大于0
        'product_id'            => 'require|integer|gt:0', // 商品ID，必填，整数，必须大于0
        'rule_name'             => 'require|max:255|string', // 规则名称，必填，最大255字符，字符串
        'logistics_company'      => 'require|integer|gt:0', // 物流公司，必填，整数，必须大于0
        'shipping_warehouse'    => 'require|integer|between:1,65535', // 发货仓库，必填，整数，范围1-65535
        'to_nation'             => 'require|integer|gt:0', // 目的国家，必填，整数，必须大于0
        'wid'                   => 'require|integer|gt:0', // 仓库，必填，整数，必须大于0
        'terms'                 => 'require|in:1,2', // 贸易条款，必填，必须为1或2
        'freight_tag'           => 'in:1,2,3,4', // 运费标记，可选，必须为1、2、3或4
        'from_nation'           => 'integer|gt:0', // 始发国家，可选，整数，必须大于0
        'from_city'             => 'integer|gt:0', // 始发城市，可选，整数，必须大于0
        'model'                 => 'in:1,2,3', // 机型，可选，必须为1、2或3
        'weight_lower'          => 'decimal|>=:0', // 最小重量，可选，必须为非负小数
        'weight_upper'          => 'decimal|>=:0', // 最大重量，可选，必须为非负小数
        'transfer_fee'          => 'decimal|>=:0', // 调拨费，可选，必须为非负小数
        'single_fee'            => 'decimal|>=:0', // 单件费，可选，必须为非负小数
        'magnetic_inspection_fee' => 'decimal|>=:0', // 磁检费，可选，必须为非负小数
        'customs_declaration_fee' => 'decimal|>=:0', // 报关费，可选，必须为非负小数
        'insurance_rate'        => 'decimal|>=:0', // 保率，可选，必须为非负小数
        'insurance_fee'         => 'decimal|>=:0', // 保险费，可选，必须为非负小数
        'freight'               => 'require|>=:0', // 运费，必填，必须为非负数
        'level'                 => 'integer|>=:0', // 级别，可选，必须为非负整数
        'is_del'                => 'in:0,1', // 删除状态，可选，必须为0或1
        'status'                => 'in:0,1', // 状态，可选，必须为0或1
        'notes'                 => 'max:255|string', // 备注，可选，最大255字符，字符串
        'creator'               => 'require|integer|gt:0', // 创建人，必填，整数，必须大于0
        'create_time'           => 'dateFormat:Y-m-d H:i:s', // 创建时间，格式化日期
        'updater'               => 'integer|gt:0', // 更新人，可选，整数，必须大于0
        'update_time'           => 'dateFormat:Y-m-d H:i:s', // 更新时间，格式化日期
    ];


    // 验证场景
    protected $scene = [
        'create' => ['logistics_name', 'terms', 'freight', 'from_nation', 'to_nation', 'prescription', 'surcharge_freight', 'execution_date'],
        'calculateFee' => ['terms',  'to_nation', 'prescription', 'product', ],
        'update' => ['id', 'logistics_name', 'terms', 'freight', 'from_nation', 'to_nation', 'prescription', 'surcharge_freight', 'execution_date'],
        'search' => ['name' => 'string', 'status' => 'in:0,1', 'create_time', 'update_time'],
        'delete' => ['ids' => 'require'],
        'status' => ['ids' => 'require'],
        'show'   => ['id'],
        'getLogisticsFee' => [
            'from_nation',
            'from_city',
            'to_nation',
            'logistics_name',
            'product_list'
        ]
    ];




    /**
     * 定义错误信息
     * 格式：'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    // 验证消息
    protected $message = [
        'freight.require' => '运费不能为空',
        'freight.>=' => '运费不能为负数',
    ];



    protected function checkIds($value, $rule, $data = [])
    {
        if (is_array($value)) {
            foreach ($value as $id) {
                if (!is_numeric($id) || $id <= 0) {
                    return '每个ID必须是正整数';
                }
            }
            return true;
        }
        return 'IDs必须是数组';
    }
}
